package com.qujia.station.service;


import com.qujia.common.core.domain.AjaxResult;
import com.qujia.common.core.domain.ResultData;
import com.qujia.label.domain.CustomerLabelDemo;
import com.qujia.station.domain.Enterprise;
import com.qujia.station.domain.PayOrder;
import com.qujia.station.domain.SendMessage;
import com.qujia.station.domain.SysAppUserInfo;
import com.qujia.station.domain.dto.MemberNumDto;
import com.qujia.station.domain.vo.YunHuaOrderInfo;
import com.qujia.station.domain.vo.YunHuaUserVo;
import com.qujia.station.domain.vo.appUserNumberVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 会员信息Service接口
 *
 * @author qujia
 * @date 2020-12-08
 */
public interface IAppUserInfoService {
    /**
     * 查询会员信息
     *
     * @param userId 会员信息
     * @return 会员信息
     */
    public void increaseShareCount(Long userId);

    public void increaseTruckNumber(@Param("truckNumber") String truckNumber, @Param("userId") Long userId);



    public Integer getShareCountByUserId(Long userId);

    public SysAppUserInfo selectAppUserInfoById(Long userId);

    public SysAppUserInfo selectAppUserInfoByPhone(String phone);

    /**
     * 查询会员统计信息
     *
     * @param appUserInfo 会员信息
     * @return 油罐信息
     */
    public SysAppUserInfo selectAppUserInfoSum(SysAppUserInfo appUserInfo);

    /**
     * 查询会员信息列表
     *
     * @param appUserInfo 会员信息
     * @return 会员信息集合
     */
    public List<SysAppUserInfo> selectAppUserInfoList(SysAppUserInfo appUserInfo);

    /**
     * 手动发券查询会员信息列表
     *
     * @param customerLabelDemo 会员信息
     * @return 手动发券查询会员信息列表
     */
    public List<CustomerLabelDemo> selectAppUserInfoListForCoupon(CustomerLabelDemo customerLabelDemo);

    /**
     * 导入用户数据
     *
     * @param appuserList        用户数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName        操作用户
     * @return 结果
     */
    public String importAppUserInfo(List<SysAppUserInfo> appuserList, Boolean isUpdateSupport, String operName);

    List<SysAppUserInfo> getAppUserInfoByPhoneAndStationId(String mobilePhone, Long stationId);

    public int addAppUserPoints(SysAppUserInfo appUserInfo);

    /**
     * 清除redis的内容
     *
     * @param enterprise 清除缓存
     * @return 发送会员信息
     */
    public AjaxResult clearRedis(Enterprise enterprise);

    /**
     * 查询新用户
     *
     * @param enterpriseId 油企id
     * @return 会员信息
     */
    public List<SysAppUserInfo> selectNewAppUser(Long enterpriseId);


    /**
     * 发送信息
     *
     * @param sendMessage 发送信息
     * @return 发送会员信息
     */
    public AjaxResult sendMessageToUser(SendMessage sendMessage, Enterprise enterprise);

    /**
     * 新增会员信息
     *
     * @param appUserInfo 会员信息
     * @return 结果
     */
    public int insertAppUserInfo(SysAppUserInfo appUserInfo);

    /**
     * 修改会员信息
     *
     * @param appUserInfo 会员信息
     * @return 结果
     */
    public int updateMember(SysAppUserInfo appUserInfo);

    /**
     * 删除会员信息
     *
     * @param userId 会员信息ID
     * @return 结果
     */
    public int deleteAppUserInfoById(Long userId);

    /**
     * 批量删除会员信息
     *
     * @param userIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteAppUserInfoByIds(Long[] userIds);

    /**
     * 向云华发送信息
     *
     * @param appUserInfo 会员信息
     * @return 会员信息集合
     */
    public int sendUserToYunHua(SysAppUserInfo appUserInfo);

    /**
     * 获取会员数量
     * @param appUserInfo
     * @return
     */
    appUserNumberVo getAppUserNumber(SysAppUserInfo appUserInfo);

    int syncYunHuaUser(String mobilePhone, String enterpriseId);

    String getYunHuaUserId(String mobilePhone);

    void restAppUserPassword(Long userId);

    void updateUserMemberCode(Long enterpriseId);

    SysAppUserInfo getUserRegisteDateByPhoneAndStationId(String mobilePhone, Long stationId);

    void batchUserToYunHua(List<YunHuaUserVo> yunHuaUserVoList);

    SysAppUserInfo getOne(SysAppUserInfo appUserInfo);

    /**
     * 首页统计会员总数、今日新增会员数、超级会员数
     * */
    MemberNumDto selectMemberNum(PayOrder payOrder);

    ResultData sendMessageToUserNew(SendMessage sendMessage);

    ResultData sendMessageToUserBatch(CustomerLabelDemo customerLabelDemo);

    boolean updateOpenId(Long userId);

}
